package com.dt.platform.domain.oa;

import com.github.foxnic.dao.entity.Entity;
import io.swagger.annotations.ApiModel;
import javax.persistence.Table;
import com.github.foxnic.sql.meta.DBTable;
import com.dt.platform.constants.db.OaTables.OA_FIN_ACCOUNTING_RECORD;
import io.swagger.annotations.ApiModelProperty;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.Transient;
import com.github.foxnic.api.swagger.EnumFor;
import javax.persistence.Id;
import org.github.foxnic.web.domain.hrm.Employee;
import org.github.foxnic.web.domain.system.DictItem;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.github.foxnic.commons.lang.DataParser;
import java.util.Map;
import com.github.foxnic.dao.entity.EntityContext;
import com.dt.platform.domain.oa.meta.FinAccountingRecordMeta;
import com.github.foxnic.sql.data.ExprRcd;



/**
 * 收支记账
 * <p>收支记账 , 数据表 oa_fin_accounting_record 的PO类型</p>
 * @author 金杰 , maillank@qq.com
 * @since 2025-06-08 12:40:51
 * @sign B30C3FA66FF27DAF558362BAF2E6855D
 * 此文件由工具自动生成，请勿修改。若表结构或配置发生变动，请使用工具重新生成。
*/

@Table(name = "oa_fin_accounting_record")
@ApiModel(description = "收支记账 ; 收支记账 , 数据表 oa_fin_accounting_record 的PO类型")
public class FinAccountingRecord extends Entity {

	private static final long serialVersionUID = 1L;

	public static final DBTable TABLE =OA_FIN_ACCOUNTING_RECORD.$TABLE;
	
	/**
	 * 账目分类：账目分类
	*/
	@ApiModelProperty(required = false,value="账目分类" , notes = "账目分类")
	private String accountingCategory;
	
	/**
	 * 收支金额：收支金额
	*/
	@ApiModelProperty(required = false,value="收支金额" , notes = "收支金额" , example = "0.00")
	private BigDecimal amount;
	
	/**
	 * 创建人ID：创建人ID
	*/
	@ApiModelProperty(required = false,value="创建人ID" , notes = "创建人ID" , example = "110588348101165911")
	private String createBy;
	
	/**
	 * 创建时间：创建时间
	*/
	@ApiModelProperty(required = false,value="创建时间" , notes = "创建时间" , example = "2025-06-03 09:45:57")
	private Date createTime;
	
	/**
	 * 删除人ID：删除人ID
	*/
	@ApiModelProperty(required = false,value="删除人ID" , notes = "删除人ID")
	private String deleteBy;
	
	/**
	 * 删除时间：删除时间
	*/
	@ApiModelProperty(required = false,value="删除时间" , notes = "删除时间")
	private Date deleteTime;
	
	/**
	 * 是否已删除：是否已删除
	*/
	@ApiModelProperty(required = true,value="是否已删除" , notes = "是否已删除" , example = "0")
	private Integer deleted;
	@Transient
	@EnumFor("deleted")
	private Boolean deletedBool;
	
	/**
	 * 收支凭证：收支凭证
	*/
	@ApiModelProperty(required = false,value="收支凭证" , notes = "收支凭证")
	private String fileIds;
	
	/**
	 * 主键：主键
	*/
	@Id
	@ApiModelProperty(required = true,value="主键" , notes = "主键" , example = "699520797261168645")
	private String id;
	
	/**
	 * 收支名称：收支名称
	*/
	@ApiModelProperty(required = false,value="收支名称" , notes = "收支名称" , example = "12")
	private String name;
	
	/**
	 * 备注：备注
	*/
	@ApiModelProperty(required = false,value="备注" , notes = "备注")
	private String notes;
	
	/**
	 * 操作人员：操作人员
	*/
	@ApiModelProperty(required = false,value="操作人员" , notes = "操作人员" , example = "E001")
	private String operId;
	
	/**
	 * 操作时间：操作时间
	*/
	@ApiModelProperty(required = false,value="操作时间" , notes = "操作时间")
	private Date operTime;
	
	/**
	 * 支付方式：支付方式
	*/
	@ApiModelProperty(required = false,value="支付方式" , notes = "支付方式" , example = "weixin")
	private String payMethod;
	
	/**
	 * 收支时间：收支时间
	*/
	@ApiModelProperty(required = false,value="收支时间" , notes = "收支时间" , example = "2025-06-03 09:45:46")
	private Date rcdTime;
	
	/**
	 * 收支状态：收支状态
	*/
	@ApiModelProperty(required = false,value="收支状态" , notes = "收支状态" , example = "valid")
	private String status;
	
	/**
	 * 租户：租户
	*/
	@ApiModelProperty(required = false,value="租户" , notes = "租户" , example = "T001")
	private String tenantId;
	
	/**
	 * 记账类型：记账类型
	*/
	@ApiModelProperty(required = false,value="记账类型" , notes = "记账类型" , example = "expenses")
	private String type;
	
	/**
	 * 修改人ID：修改人ID
	*/
	@ApiModelProperty(required = false,value="修改人ID" , notes = "修改人ID" , example = "110588348101165911")
	private String updateBy;
	
	/**
	 * 修改时间：修改时间
	*/
	@ApiModelProperty(required = false,value="修改时间" , notes = "修改时间" , example = "2025-06-03 09:53:55")
	private Date updateTime;
	
	/**
	 * 数据版本号：数据版本号
	*/
	@ApiModelProperty(required = true,value="数据版本号" , notes = "数据版本号" , example = "2")
	private Integer version;
	
	/**
	 * operUser：operUser
	*/
	@ApiModelProperty(required = false,value="operUser" , notes = "operUser")
	private Employee operUser;
	
	/**
	 * payMethodDict：payMethodDict
	*/
	@ApiModelProperty(required = false,value="payMethodDict" , notes = "payMethodDict")
	private DictItem payMethodDict;
	
	/**
	 * 获得 账目分类<br>
	 * 账目分类
	 * @return 账目分类
	*/
	public String getAccountingCategory() {
		return accountingCategory;
	}
	
	/**
	 * 设置 账目分类
	 * @param accountingCategory 账目分类
	 * @return 当前对象
	*/
	public FinAccountingRecord setAccountingCategory(String accountingCategory) {
		this.accountingCategory=accountingCategory;
		return this;
	}
	
	/**
	 * 获得 收支金额<br>
	 * 收支金额
	 * @return 收支金额
	*/
	public BigDecimal getAmount() {
		return amount;
	}
	
	/**
	 * 设置 收支金额
	 * @param amount 收支金额
	 * @return 当前对象
	*/
	public FinAccountingRecord setAmount(BigDecimal amount) {
		this.amount=amount;
		return this;
	}
	
	/**
	 * 获得 创建人ID<br>
	 * 创建人ID
	 * @return 创建人ID
	*/
	public String getCreateBy() {
		return createBy;
	}
	
	/**
	 * 设置 创建人ID
	 * @param createBy 创建人ID
	 * @return 当前对象
	*/
	public FinAccountingRecord setCreateBy(String createBy) {
		this.createBy=createBy;
		return this;
	}
	
	/**
	 * 获得 创建时间<br>
	 * 创建时间
	 * @return 创建时间
	*/
	public Date getCreateTime() {
		return createTime;
	}
	
	/**
	 * 设置 创建时间
	 * @param createTime 创建时间
	 * @return 当前对象
	*/
	public FinAccountingRecord setCreateTime(Date createTime) {
		this.createTime=createTime;
		return this;
	}
	
	/**
	 * 获得 删除人ID<br>
	 * 删除人ID
	 * @return 删除人ID
	*/
	public String getDeleteBy() {
		return deleteBy;
	}
	
	/**
	 * 设置 删除人ID
	 * @param deleteBy 删除人ID
	 * @return 当前对象
	*/
	public FinAccountingRecord setDeleteBy(String deleteBy) {
		this.deleteBy=deleteBy;
		return this;
	}
	
	/**
	 * 获得 删除时间<br>
	 * 删除时间
	 * @return 删除时间
	*/
	public Date getDeleteTime() {
		return deleteTime;
	}
	
	/**
	 * 设置 删除时间
	 * @param deleteTime 删除时间
	 * @return 当前对象
	*/
	public FinAccountingRecord setDeleteTime(Date deleteTime) {
		this.deleteTime=deleteTime;
		return this;
	}
	
	/**
	 * 获得 是否已删除<br>
	 * 是否已删除
	 * @return 是否已删除
	*/
	public Integer getDeleted() {
		return deleted;
	}
	
	/**
	 * 获得 是否已删除 的投影属性<br>
	 * 等价于 getDeleted 方法，获得对应的枚举类型
	 * @return 是否已删除
	*/
	@Transient
	public Boolean isDeleted() {
		if(this.deletedBool==null) {
			this.deletedBool=DataParser.parseBoolean(deleted);
		}
		return this.deletedBool ;
	}
	
	/**
	 * 设置 是否已删除
	 * @param deleted 是否已删除
	 * @return 当前对象
	*/
	@JsonProperty("deleted")
	public FinAccountingRecord setDeleted(Integer deleted) {
		this.deleted=deleted;
		this.deletedBool=DataParser.parseBoolean(deleted);
		return this;
	}
	
	/**
	 * 设置 是否已删除的投影属性，等同于设置 是否已删除
	 * @param deletedBool 是否已删除
	 * @return 当前对象
	*/
	@Transient
	public FinAccountingRecord setDeleted(Boolean deletedBool) {
		if(deletedBool==null) {
			this.deleted=null;
		} else {
			this.deleted=deletedBool?1:0;
		}
		this.deletedBool=deletedBool;
		return this;
	}
	
	/**
	 * 获得 收支凭证<br>
	 * 收支凭证
	 * @return 收支凭证
	*/
	public String getFileIds() {
		return fileIds;
	}
	
	/**
	 * 设置 收支凭证
	 * @param fileIds 收支凭证
	 * @return 当前对象
	*/
	public FinAccountingRecord setFileIds(String fileIds) {
		this.fileIds=fileIds;
		return this;
	}
	
	/**
	 * 获得 主键<br>
	 * 主键
	 * @return 主键
	*/
	public String getId() {
		return id;
	}
	
	/**
	 * 设置 主键
	 * @param id 主键
	 * @return 当前对象
	*/
	public FinAccountingRecord setId(String id) {
		this.id=id;
		return this;
	}
	
	/**
	 * 获得 收支名称<br>
	 * 收支名称
	 * @return 收支名称
	*/
	public String getName() {
		return name;
	}
	
	/**
	 * 设置 收支名称
	 * @param name 收支名称
	 * @return 当前对象
	*/
	public FinAccountingRecord setName(String name) {
		this.name=name;
		return this;
	}
	
	/**
	 * 获得 备注<br>
	 * 备注
	 * @return 备注
	*/
	public String getNotes() {
		return notes;
	}
	
	/**
	 * 设置 备注
	 * @param notes 备注
	 * @return 当前对象
	*/
	public FinAccountingRecord setNotes(String notes) {
		this.notes=notes;
		return this;
	}
	
	/**
	 * 获得 操作人员<br>
	 * 操作人员
	 * @return 操作人员
	*/
	public String getOperId() {
		return operId;
	}
	
	/**
	 * 设置 操作人员
	 * @param operId 操作人员
	 * @return 当前对象
	*/
	public FinAccountingRecord setOperId(String operId) {
		this.operId=operId;
		return this;
	}
	
	/**
	 * 获得 操作时间<br>
	 * 操作时间
	 * @return 操作时间
	*/
	public Date getOperTime() {
		return operTime;
	}
	
	/**
	 * 设置 操作时间
	 * @param operTime 操作时间
	 * @return 当前对象
	*/
	public FinAccountingRecord setOperTime(Date operTime) {
		this.operTime=operTime;
		return this;
	}
	
	/**
	 * 获得 支付方式<br>
	 * 支付方式
	 * @return 支付方式
	*/
	public String getPayMethod() {
		return payMethod;
	}
	
	/**
	 * 设置 支付方式
	 * @param payMethod 支付方式
	 * @return 当前对象
	*/
	public FinAccountingRecord setPayMethod(String payMethod) {
		this.payMethod=payMethod;
		return this;
	}
	
	/**
	 * 获得 收支时间<br>
	 * 收支时间
	 * @return 收支时间
	*/
	public Date getRcdTime() {
		return rcdTime;
	}
	
	/**
	 * 设置 收支时间
	 * @param rcdTime 收支时间
	 * @return 当前对象
	*/
	public FinAccountingRecord setRcdTime(Date rcdTime) {
		this.rcdTime=rcdTime;
		return this;
	}
	
	/**
	 * 获得 收支状态<br>
	 * 收支状态
	 * @return 收支状态
	*/
	public String getStatus() {
		return status;
	}
	
	/**
	 * 设置 收支状态
	 * @param status 收支状态
	 * @return 当前对象
	*/
	public FinAccountingRecord setStatus(String status) {
		this.status=status;
		return this;
	}
	
	/**
	 * 获得 租户<br>
	 * 租户
	 * @return 租户
	*/
	public String getTenantId() {
		return tenantId;
	}
	
	/**
	 * 设置 租户
	 * @param tenantId 租户
	 * @return 当前对象
	*/
	public FinAccountingRecord setTenantId(String tenantId) {
		this.tenantId=tenantId;
		return this;
	}
	
	/**
	 * 获得 记账类型<br>
	 * 记账类型
	 * @return 记账类型
	*/
	public String getType() {
		return type;
	}
	
	/**
	 * 设置 记账类型
	 * @param type 记账类型
	 * @return 当前对象
	*/
	public FinAccountingRecord setType(String type) {
		this.type=type;
		return this;
	}
	
	/**
	 * 获得 修改人ID<br>
	 * 修改人ID
	 * @return 修改人ID
	*/
	public String getUpdateBy() {
		return updateBy;
	}
	
	/**
	 * 设置 修改人ID
	 * @param updateBy 修改人ID
	 * @return 当前对象
	*/
	public FinAccountingRecord setUpdateBy(String updateBy) {
		this.updateBy=updateBy;
		return this;
	}
	
	/**
	 * 获得 修改时间<br>
	 * 修改时间
	 * @return 修改时间
	*/
	public Date getUpdateTime() {
		return updateTime;
	}
	
	/**
	 * 设置 修改时间
	 * @param updateTime 修改时间
	 * @return 当前对象
	*/
	public FinAccountingRecord setUpdateTime(Date updateTime) {
		this.updateTime=updateTime;
		return this;
	}
	
	/**
	 * 获得 数据版本号<br>
	 * 数据版本号
	 * @return 数据版本号
	*/
	public Integer getVersion() {
		return version;
	}
	
	/**
	 * 设置 数据版本号
	 * @param version 数据版本号
	 * @return 当前对象
	*/
	public FinAccountingRecord setVersion(Integer version) {
		this.version=version;
		return this;
	}
	
	/**
	 * 获得 operUser<br>
	 * operUser
	 * @return operUser
	*/
	public Employee getOperUser() {
		return operUser;
	}
	
	/**
	 * 设置 operUser
	 * @param operUser operUser
	 * @return 当前对象
	*/
	public FinAccountingRecord setOperUser(Employee operUser) {
		this.operUser=operUser;
		return this;
	}
	
	/**
	 * 获得 payMethodDict<br>
	 * payMethodDict
	 * @return payMethodDict
	*/
	public DictItem getPayMethodDict() {
		return payMethodDict;
	}
	
	/**
	 * 设置 payMethodDict
	 * @param payMethodDict payMethodDict
	 * @return 当前对象
	*/
	public FinAccountingRecord setPayMethodDict(DictItem payMethodDict) {
		this.payMethodDict=payMethodDict;
		return this;
	}

	/**
	 * 将自己转换成指定类型的PO
	 * @param poType  PO类型
	 * @return FinAccountingRecord , 转换好的 FinAccountingRecord 对象
	*/
	@Transient
	public <T extends Entity> T toPO(Class<T> poType) {
		return EntityContext.create(poType, this);
	}

	/**
	 * 将自己转换成任意指定类型
	 * @param pojoType  Pojo类型
	 * @return FinAccountingRecord , 转换好的 PoJo 对象
	*/
	@Transient
	public <T> T toPojo(Class<T> pojoType) {
		if(Entity.class.isAssignableFrom(pojoType)) {
			return (T)this.toPO((Class<Entity>)pojoType);
		}
		try {
			T pojo=pojoType.newInstance();
			EntityContext.copyProperties(pojo, this);
			return pojo;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * 克隆当前对象
	*/
	@Transient
	public FinAccountingRecord clone() {
		return duplicate(true);
	}

	/**
	 * 复制当前对象
	 * @param all 是否复制全部属性，当 false 时，仅复制来自数据表的属性
	*/
	@Transient
	public FinAccountingRecord duplicate(boolean all) {
		com.dt.platform.domain.oa.meta.FinAccountingRecordMeta.$$proxy$$ inst = new com.dt.platform.domain.oa.meta.FinAccountingRecordMeta.$$proxy$$();
		inst.setAmount(this.getAmount());
		inst.setNotes(this.getNotes());
		inst.setOperId(this.getOperId());
		inst.setUpdateTime(this.getUpdateTime());
		inst.setType(this.getType());
		inst.setVersion(this.getVersion());
		inst.setCreateBy(this.getCreateBy());
		inst.setDeleted(this.getDeleted());
		inst.setCreateTime(this.getCreateTime());
		inst.setDeleteTime(this.getDeleteTime());
		inst.setFileIds(this.getFileIds());
		inst.setUpdateBy(this.getUpdateBy());
		inst.setPayMethod(this.getPayMethod());
		inst.setName(this.getName());
		inst.setTenantId(this.getTenantId());
		inst.setDeleteBy(this.getDeleteBy());
		inst.setId(this.getId());
		inst.setAccountingCategory(this.getAccountingCategory());
		inst.setOperTime(this.getOperTime());
		inst.setRcdTime(this.getRcdTime());
		inst.setStatus(this.getStatus());
		if(all) {
			inst.setPayMethodDict(this.getPayMethodDict());
			inst.setOperUser(this.getOperUser());
		}
		inst.clearModifies();
		return inst;
	}

	/**
	 * 克隆当前对象
	*/
	@Transient
	public FinAccountingRecord clone(boolean deep) {
		return EntityContext.clone(FinAccountingRecord.class,this,deep);
	}

	/**
	 * 将 Map 转换成 FinAccountingRecord
	 * @param finAccountingRecordMap 包含实体信息的 Map 对象
	 * @return FinAccountingRecord , 转换好的的 FinAccountingRecord 对象
	*/
	@Transient
	public static FinAccountingRecord createFrom(Map<String,Object> finAccountingRecordMap) {
		if(finAccountingRecordMap==null) return null;
		FinAccountingRecord po = create();
		EntityContext.copyProperties(po,finAccountingRecordMap);
		po.clearModifies();
		return po;
	}

	/**
	 * 将 Pojo 转换成 FinAccountingRecord
	 * @param pojo 包含实体信息的 Pojo 对象
	 * @return FinAccountingRecord , 转换好的的 FinAccountingRecord 对象
	*/
	@Transient
	public static FinAccountingRecord createFrom(Object pojo) {
		if(pojo==null) return null;
		FinAccountingRecord po = create();
		EntityContext.copyProperties(po,pojo);
		po.clearModifies();
		return po;
	}

	/**
	 * 创建一个 FinAccountingRecord，等同于 new
	 * @return FinAccountingRecord 对象
	*/
	@Transient
	public static FinAccountingRecord create() {
		return new com.dt.platform.domain.oa.meta.FinAccountingRecordMeta.$$proxy$$();
	}

	/**
	 * 从 Map 读取
	 * @param map 记录数据
	 * @param cast 是否用 DataParser 进行类型转换
	 * @return  是否读取成功
	*/
	public boolean read(Map<String, Object> map,boolean cast) {
		if(map==null) return false;
		if(cast) {
			this.setAmount(DataParser.parse(BigDecimal.class, map.get(FinAccountingRecordMeta.AMOUNT)));
			this.setNotes(DataParser.parse(String.class, map.get(FinAccountingRecordMeta.NOTES)));
			this.setOperId(DataParser.parse(String.class, map.get(FinAccountingRecordMeta.OPER_ID)));
			this.setUpdateTime(DataParser.parse(Date.class, map.get(FinAccountingRecordMeta.UPDATE_TIME)));
			this.setType(DataParser.parse(String.class, map.get(FinAccountingRecordMeta.TYPE)));
			this.setVersion(DataParser.parse(Integer.class, map.get(FinAccountingRecordMeta.VERSION)));
			this.setCreateBy(DataParser.parse(String.class, map.get(FinAccountingRecordMeta.CREATE_BY)));
			this.setDeleted(DataParser.parse(Integer.class, map.get(FinAccountingRecordMeta.DELETED)));
			this.setCreateTime(DataParser.parse(Date.class, map.get(FinAccountingRecordMeta.CREATE_TIME)));
			this.setDeleteTime(DataParser.parse(Date.class, map.get(FinAccountingRecordMeta.DELETE_TIME)));
			this.setFileIds(DataParser.parse(String.class, map.get(FinAccountingRecordMeta.FILE_IDS)));
			this.setUpdateBy(DataParser.parse(String.class, map.get(FinAccountingRecordMeta.UPDATE_BY)));
			this.setPayMethod(DataParser.parse(String.class, map.get(FinAccountingRecordMeta.PAY_METHOD)));
			this.setName(DataParser.parse(String.class, map.get(FinAccountingRecordMeta.NAME)));
			this.setTenantId(DataParser.parse(String.class, map.get(FinAccountingRecordMeta.TENANT_ID)));
			this.setDeleteBy(DataParser.parse(String.class, map.get(FinAccountingRecordMeta.DELETE_BY)));
			this.setId(DataParser.parse(String.class, map.get(FinAccountingRecordMeta.ID)));
			this.setAccountingCategory(DataParser.parse(String.class, map.get(FinAccountingRecordMeta.ACCOUNTING_CATEGORY)));
			this.setOperTime(DataParser.parse(Date.class, map.get(FinAccountingRecordMeta.OPER_TIME)));
			this.setRcdTime(DataParser.parse(Date.class, map.get(FinAccountingRecordMeta.RCD_TIME)));
			this.setStatus(DataParser.parse(String.class, map.get(FinAccountingRecordMeta.STATUS)));
			// others
			this.setPayMethodDict(DataParser.parse(DictItem.class, map.get(FinAccountingRecordMeta.PAY_METHOD_DICT)));
			this.setOperUser(DataParser.parse(Employee.class, map.get(FinAccountingRecordMeta.OPER_USER)));
			return true;
		} else {
			try {
				this.setAmount( (BigDecimal)map.get(FinAccountingRecordMeta.AMOUNT));
				this.setNotes( (String)map.get(FinAccountingRecordMeta.NOTES));
				this.setOperId( (String)map.get(FinAccountingRecordMeta.OPER_ID));
				this.setUpdateTime( (Date)map.get(FinAccountingRecordMeta.UPDATE_TIME));
				this.setType( (String)map.get(FinAccountingRecordMeta.TYPE));
				this.setVersion( (Integer)map.get(FinAccountingRecordMeta.VERSION));
				this.setCreateBy( (String)map.get(FinAccountingRecordMeta.CREATE_BY));
				this.setDeleted( (Integer)map.get(FinAccountingRecordMeta.DELETED));
				this.setCreateTime( (Date)map.get(FinAccountingRecordMeta.CREATE_TIME));
				this.setDeleteTime( (Date)map.get(FinAccountingRecordMeta.DELETE_TIME));
				this.setFileIds( (String)map.get(FinAccountingRecordMeta.FILE_IDS));
				this.setUpdateBy( (String)map.get(FinAccountingRecordMeta.UPDATE_BY));
				this.setPayMethod( (String)map.get(FinAccountingRecordMeta.PAY_METHOD));
				this.setName( (String)map.get(FinAccountingRecordMeta.NAME));
				this.setTenantId( (String)map.get(FinAccountingRecordMeta.TENANT_ID));
				this.setDeleteBy( (String)map.get(FinAccountingRecordMeta.DELETE_BY));
				this.setId( (String)map.get(FinAccountingRecordMeta.ID));
				this.setAccountingCategory( (String)map.get(FinAccountingRecordMeta.ACCOUNTING_CATEGORY));
				this.setOperTime( (Date)map.get(FinAccountingRecordMeta.OPER_TIME));
				this.setRcdTime( (Date)map.get(FinAccountingRecordMeta.RCD_TIME));
				this.setStatus( (String)map.get(FinAccountingRecordMeta.STATUS));
				// others
				this.setPayMethodDict( (DictItem)map.get(FinAccountingRecordMeta.PAY_METHOD_DICT));
				this.setOperUser( (Employee)map.get(FinAccountingRecordMeta.OPER_USER));
				return true;
			} catch (Exception e) {
				return false;
			}
		}
	}

	/**
	 * 从 Map 读取
	 * @param r 记录数据
	 * @param cast 是否用 DataParser 进行类型转换
	 * @return  是否读取成功
	*/
	public boolean read(ExprRcd r,boolean cast) {
		if(r==null) return false;
		if(cast) {
			this.setAmount(DataParser.parse(BigDecimal.class, r.getValue(FinAccountingRecordMeta.AMOUNT)));
			this.setNotes(DataParser.parse(String.class, r.getValue(FinAccountingRecordMeta.NOTES)));
			this.setOperId(DataParser.parse(String.class, r.getValue(FinAccountingRecordMeta.OPER_ID)));
			this.setUpdateTime(DataParser.parse(Date.class, r.getValue(FinAccountingRecordMeta.UPDATE_TIME)));
			this.setType(DataParser.parse(String.class, r.getValue(FinAccountingRecordMeta.TYPE)));
			this.setVersion(DataParser.parse(Integer.class, r.getValue(FinAccountingRecordMeta.VERSION)));
			this.setCreateBy(DataParser.parse(String.class, r.getValue(FinAccountingRecordMeta.CREATE_BY)));
			this.setDeleted(DataParser.parse(Integer.class, r.getValue(FinAccountingRecordMeta.DELETED)));
			this.setCreateTime(DataParser.parse(Date.class, r.getValue(FinAccountingRecordMeta.CREATE_TIME)));
			this.setDeleteTime(DataParser.parse(Date.class, r.getValue(FinAccountingRecordMeta.DELETE_TIME)));
			this.setFileIds(DataParser.parse(String.class, r.getValue(FinAccountingRecordMeta.FILE_IDS)));
			this.setUpdateBy(DataParser.parse(String.class, r.getValue(FinAccountingRecordMeta.UPDATE_BY)));
			this.setPayMethod(DataParser.parse(String.class, r.getValue(FinAccountingRecordMeta.PAY_METHOD)));
			this.setName(DataParser.parse(String.class, r.getValue(FinAccountingRecordMeta.NAME)));
			this.setTenantId(DataParser.parse(String.class, r.getValue(FinAccountingRecordMeta.TENANT_ID)));
			this.setDeleteBy(DataParser.parse(String.class, r.getValue(FinAccountingRecordMeta.DELETE_BY)));
			this.setId(DataParser.parse(String.class, r.getValue(FinAccountingRecordMeta.ID)));
			this.setAccountingCategory(DataParser.parse(String.class, r.getValue(FinAccountingRecordMeta.ACCOUNTING_CATEGORY)));
			this.setOperTime(DataParser.parse(Date.class, r.getValue(FinAccountingRecordMeta.OPER_TIME)));
			this.setRcdTime(DataParser.parse(Date.class, r.getValue(FinAccountingRecordMeta.RCD_TIME)));
			this.setStatus(DataParser.parse(String.class, r.getValue(FinAccountingRecordMeta.STATUS)));
			return true;
		} else {
			try {
				this.setAmount( (BigDecimal)r.getValue(FinAccountingRecordMeta.AMOUNT));
				this.setNotes( (String)r.getValue(FinAccountingRecordMeta.NOTES));
				this.setOperId( (String)r.getValue(FinAccountingRecordMeta.OPER_ID));
				this.setUpdateTime( (Date)r.getValue(FinAccountingRecordMeta.UPDATE_TIME));
				this.setType( (String)r.getValue(FinAccountingRecordMeta.TYPE));
				this.setVersion( (Integer)r.getValue(FinAccountingRecordMeta.VERSION));
				this.setCreateBy( (String)r.getValue(FinAccountingRecordMeta.CREATE_BY));
				this.setDeleted( (Integer)r.getValue(FinAccountingRecordMeta.DELETED));
				this.setCreateTime( (Date)r.getValue(FinAccountingRecordMeta.CREATE_TIME));
				this.setDeleteTime( (Date)r.getValue(FinAccountingRecordMeta.DELETE_TIME));
				this.setFileIds( (String)r.getValue(FinAccountingRecordMeta.FILE_IDS));
				this.setUpdateBy( (String)r.getValue(FinAccountingRecordMeta.UPDATE_BY));
				this.setPayMethod( (String)r.getValue(FinAccountingRecordMeta.PAY_METHOD));
				this.setName( (String)r.getValue(FinAccountingRecordMeta.NAME));
				this.setTenantId( (String)r.getValue(FinAccountingRecordMeta.TENANT_ID));
				this.setDeleteBy( (String)r.getValue(FinAccountingRecordMeta.DELETE_BY));
				this.setId( (String)r.getValue(FinAccountingRecordMeta.ID));
				this.setAccountingCategory( (String)r.getValue(FinAccountingRecordMeta.ACCOUNTING_CATEGORY));
				this.setOperTime( (Date)r.getValue(FinAccountingRecordMeta.OPER_TIME));
				this.setRcdTime( (Date)r.getValue(FinAccountingRecordMeta.RCD_TIME));
				this.setStatus( (String)r.getValue(FinAccountingRecordMeta.STATUS));
				return true;
			} catch (Exception e) {
				return false;
			}
		}
	}
}